package com.relife.common.file;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.relife.common.utils.StringUtil;
import com.relife.common.utils.SysConfig;
import org.apache.log4j.Logger;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;


public class OpenOfficeUtil {
	private static final Logger log = Logger.getLogger("OpenOfficeUtil");

	/**
	 * 判断是否要转换成PDF文件
	 * 
	 * @author WU
	 * @date 2016年8月18日 下午2:16:33
	 * @param suffix
	 * @return
	 */
	public static boolean is2Pdf(String suffix) {
		List<String> names = new ArrayList<String>();
		Collections.addAll(names, SysConfig.TO_PDF_FILE);
		return names.contains(suffix);
	}

	/**
	 * 
	 * @author WU
	 * @date 2016年8月18日 下午2:17:26
	 * @param sourceFile
	 * @param destFile
	 */
	public static void office2Pdf(String sourceFile, String destFile) {
		try {
			File inputFile = new File(sourceFile);

			// 如果目标路径不存在, 则新建该路径
			File outputFile = new File(destFile);
			if (!outputFile.getParentFile().exists()) {
				outputFile.getParentFile().mkdirs();
			}

			String OpenOffice_HOME = SysConfig.getProperty("OpenOffice_HOME");// 这里是OpenOffice的安装目录,
			// 在我的项目中,为了便于拓展接口,没有直接写成这个样子,但是这样是绝对没问题的
			// 如果从文件中读取的URL地址最后一个字符不是 '\'，则添加'\'
			if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
				OpenOffice_HOME += "\\";
			}
			// 启动OpenOffice的服务
			String command = OpenOffice_HOME + "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
			Process pro = Runtime.getRuntime().exec(command);
			// connect to an OpenOffice.org instance running on port 8100
			OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
			connection.connect();

			// convert
			DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
			converter.convert(inputFile, outputFile);

			// close the connection
			connection.disconnect();
			// 关闭OpenOffice服务的进程
			pro.destroy();
			log.info("文件【" + sourceFile + "】已转成pdf");
		} catch (Exception e) {
			log.error("文件【" + sourceFile + "】转pdf失败！");
			log.error(StringUtil.exception2String(e));
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		OpenOfficeUtil.office2Pdf("D:\\1.rtf", "D:\\1.rtf.pdf");
	}

}
